package br.com.virtual.base.controller.autenticacao;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import br.com.virtual.base.controller.carrinho.CarrinhoMB;
import br.com.virtual.base.controller.util.VirtualMB;
import br.com.virtual.base.enums.SessionNameEnum;
import br.com.virtual.base.service.AutenticacaoService;
import br.com.virtual.cadastrar.model.Usuario;

@ManagedBean
@SessionScoped
public class LoginMB extends VirtualMB {

	private static final long serialVersionUID = 1L;
	private String email;
	private String senha;
	private Usuario usuario;
	private String proximaPagina;
	private boolean flagUsuarioAutenticado;

	@EJB
	private AutenticacaoService autenticacaoService;

	@PostConstruct
	public void init() {

		proximaPagina = (String) FacesContext.getCurrentInstance()
				.getExternalContext().getFlash().get("proximaPagina");

		email = "";
		senha = "";
	}

	// public void novo() {
	//
	// usuario = new Usuario();
	// }

	public String autenticarUsuario() {

		if (autenticacaoService.autenticarUsuario(email, senha)) {

			usuario = this.autenticacaoService.usuarioAutenticado();

			addMessage("Usuário autenticado com sucesso.",
					FacesMessage.SEVERITY_INFO);

			if (this.getUsuario().getPessoa().getInteresse().getProdutos()
					.size() > 0)
				this.setSession("popup", true);

			return "/index.jsf?faces-redirect=true";

		} else {

			addMessage("Nome de usuário incorreto ou senha incorreta.",
					FacesMessage.SEVERITY_ERROR);
			return null;
		}
	}

	public boolean hasUsuarioAutenticado() {

		return this.autenticacaoService.hasUsuarioAutenticado();
	}

	public void recuperarSenha() {

	}

	public String sair() {

		CarrinhoMB carrinhoMB = (CarrinhoMB) this.getManagedBean("carrinhoMB");
		if (carrinhoMB != null)
			carrinhoMB.init();

		this.autenticacaoService.logout();
		init();
		addMessage("Volte sempre!", FacesMessage.SEVERITY_INFO);

		return "/index.jsf?faces-redirect=true";
	}

	private void addMessage(String message, FacesMessage.Severity severity) {

		FacesContext.getCurrentInstance().addMessage(null,
				new FacesMessage(severity, message, ""));

	}

	public String nomeUsuarioExibir() {

		return (String)getSession(SessionNameEnum.NOME_USUARIO_EXIBIR.toString());
	}

	/* GETTERS AND SETTERS */

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public String getProximaPagina() {
		return proximaPagina;
	}

	public void setProximaPagina(String proximaPagina) {
		this.proximaPagina = proximaPagina;
	}

	public boolean isFlagUsuarioAutenticado() {
		this.setFlagUsuarioAutenticado(this.hasUsuarioAutenticado());
		return flagUsuarioAutenticado;
	}

	public void setFlagUsuarioAutenticado(boolean flagUsuarioAutenticado) {
		this.flagUsuarioAutenticado = flagUsuarioAutenticado;
	}
}
